package com.pp.controller;

import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);  //会话id
            return "登录成功";
        }
        return "登录失败";
    }

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @RequestMapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        return SaResult.data(StpUtil.getTokenInfo());
    }

    // 测试注销  ---- http://localhost:8081/acc/logout
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }
//   StpUtil.getTokenTimeout(); /

    @RequestMapping("getTokenTimeout")
    public SaResult getTokenTimeout() {
        long tokenTimeout = StpUtil.getTokenTimeout();
        return SaResult.data(tokenTimeout);
    }

//    // 获取：当前账号所拥有的权限集合
//StpUtil.getPermissionList();
//
//// 判断：当前账号是否含有指定权限, 返回 true 或 false
//StpUtil.hasPermission("user.add");
//
//// 校验：当前账号是否含有指定权限, 如果验证未通过，则抛出异常: NotPermissionException
//StpUtil.checkPermission("user.add");
//
//// 校验：当前账号是否含有指定权限 [指定多个，必须全部验证通过]
//StpUtil.checkPermissionAnd("user.add", "user.delete", "user.get");
//
//// 校验：当前账号是否含有指定权限 [指定多个，只要其一验证通过即可]
//StpUtil.checkPermissionOr("user.add", "user.delete", "user.get");
    @RequestMapping("getPermissionList")
    public SaResult getPermissionList() {
        List<String> permissionList = StpUtil.getPermissionList();
        return SaResult.data(permissionList);
    }
    @RequestMapping("hasPermission")
    public SaResult hasPermission() {
        boolean b = StpUtil.hasPermission("user.add");
        if (b){
            return SaResult.ok();

        }
        return SaResult.error("不包含");
    }
    @RequestMapping("checkPermissionAnd")
    public SaResult checkPermissionAnd() {
        try {
            StpUtil.checkPermissionAnd("user.add", "user.delete", "user.get");

        }catch (NotPermissionException e){
            e.getMessage();
            return  SaResult.error("没有对应的权限");
        }

        return SaResult.ok("你真 厉害什么权限都有");

    }


}
